home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / yerk / mps231ss.hqx / Mops source / Toolbox classes / Drvr < prev    next >
Text File  |  1993-02-01  |  2KB  |  66 lines

  1. \ drvr - parameter block for driver interface
  2. \ July 90    mrh  Mops version.
  3. \  8/16/90    rfl     close: must call kill: first
  4. Decimal
  5.  
  6. \ basic parameter block for drivers
  7.  
  8. :class    PBDrvr    super{ object }
  9.  
  10.     12 Bytes    Name        \ driver name
  11.     12 Bytes    Header        \ fields for internal use
  12.  
  13.     var        IOComp        \ i/o completion ptr
  14.     int        IOResult    \ return code
  15.     var        IONamePtr    \ name of drvr
  16.     int        vRef        \ 22
  17.     int        IORefNum    \ 24
  18.     int        csCode        \ 26
  19.     int        csP1        \ 28
  20.     int        csP2        \ 30
  21.     var        IOBuffer
  22.     var        IOReq
  23.     var        IOAct
  24.     int        IOPosMode
  25.     var        IOOffset
  26.  
  27. :m FCB:        \ ( -- fcb-addr )
  28.     addr: header   ;M
  29.  
  30. :m NAME:    \ ( addr len -- )  Names the driver.
  31.     ^base 50 erase  addr: name  >str255  put: ioNamePtr  ;m
  32.  
  33. :m KILL:
  34.     addr: header  fdos$ a406  ( Killio )  0 put: IOResult  ;m
  35.  
  36. :m OPEN:    \ ( -- fCode )
  37.     addr: header 0 (open)  ;m
  38.  
  39. :m CLOSE:    \ ( -- fCode )
  40.     kill: self  drop  addr: header  (close)  ;m
  41.  
  42. :m READ:    \ ( addr len -- fCode )  Reads n bytes via the driver.
  43.     addr: header swap rot (read)  ;m
  44.  
  45. :m WRITE:    \ ( addr len -- fCode )  Writes n bytes via the driver.
  46.     addr: header swap rot (write)  ;m
  47.  
  48. :m READNW:    \ ( cfa:proc addr len -- fCode )  No-wait read.
  49.         \    Requires a completion PROC.
  50. \    put: IOReq  put: IOBuffer  put: IOcomp
  51. \    addr: header  fcall PBRead,ASYNC  ;m
  52.     rot -> CPaddr  read: self  ;m
  53.     
  54. :m WRITENW:    \ ( cfa:proc addr len -- fCode )  No-wait write.
  55. \    put: IOReq  +base put: IOBuffer  >body +base put: IOComp
  56. \    addr: header fcall PBWrite,ASYNC  ;m
  57.     rot -> CPaddr  write: self  ;m
  58.  
  59. :m BYTESREAD:    \ ( -- #bytes )  Returns actual count of bytes read.
  60.     get: IOAct  ;m
  61.  
  62. :m RESULT:    \ ( -- IOResult )  Returns the current IOResult value.
  63.     get: IOResult  ;m
  64.  
  65. ;class
  66.